#include <dbg.h>

#include <algorithm>
#include <cassert>
#include <vector>

using namespace std;

class Solution {
public:
    int compress(vector<char>& chars) {
        int n = chars.size();
        int left = 0;  // 当前连续字符出现的第一个位置
        int len = 0;   // 修改后当前长度
        for (int i = 0; i < n; ++i) {
            if (i == n - 1 ||
                chars[i + 1] != chars[i]) {  // 最后一个位置，或者两字符分界处
                chars[len++] = chars[i];
                int nums = i - left + 1;  // 计算连续数字符的长度
                if (nums > 1) {           // 如果连续字符的长度超过1
                    for (char num : to_string(nums)) {
                        chars[len++] = num;  // 把数字加到末尾
                    }
                }
                left = i + 1;  // 移动当前连续字符出现的第一个位置
            }
        }

        return len;
    }
};

void test() {
    Solution s;

    vector<char> chars1{'a', 'a', 'b', 'b', 'c', 'c', 'c'};
    vector<char> chars2{'a'};
    vector<char> chars3{
        'a', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'};

    assert(s.compress(chars1) == 6);
    assert(s.compress(chars2) == 1);
    assert(s.compress(chars3) == 4);
}

int main() {
    test();
    return 0;
}